package com.shouhe.mysap.controller.tech;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.shouhe.mysap.common.MySapResult;
import com.shouhe.mysap.common.PageResult;
import com.shouhe.mysap.common.SelectGroupResult;
import com.shouhe.mysap.entity.SalePerson;
import com.shouhe.mysap.entity.TechPerson;
import com.shouhe.mysap.service.TechPersonService;
import com.shouhe.mysap.util.AddUtil;
import com.shouhe.mysap.util.DeleteUtil;
import com.shouhe.mysap.util.PageResultUtil;
import com.shouhe.mysap.util.UpdateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 前端控制器
 * 技术人员控制器
 * tech_person表
 * </p>
 *
 * @author 守鹤
 * @since 2020-06-01
 */
@RestController
@RequestMapping("/tech-person")
public class TechPersonController {

    @Autowired
    private TechPersonService techPersonService;

    /**
     * 分页查询全部的技术人员
     * @param page 前端传递的页码
     * @param rows 前端传递的显示条数
     * @param personGroup 技术组
     * @param personName  技术人员名字，用来模糊查询
     * @return  分页数据
     */
    @RequestMapping("/getTechPersons")
    public PageResult getTechPersons(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer rows,@RequestParam(defaultValue = "-1") Integer personGroup,@RequestParam(defaultValue = "null")String personName) {
        Map<String, Object> eqMap = new HashMap<>();
        Map<String, Object> likeMap = new HashMap<>();
        eqMap.put("tech_group",personGroup);
        likeMap.put("tech_name",personName);
        PageResult pageResult = PageResultUtil.getPageResultEqLikeMap(page, rows, techPersonService,eqMap,likeMap);
        return pageResult;
    }

    /**
     * 根据技术组 得到技术人员对象
     * @param techGroup 技术组
     * @return 技术人员对象
     */
    @RequestMapping("/getTechPersonByTechGroup")
    public TechPerson getTechPersonByTechGroup(Integer techGroup) {
        QueryWrapper<TechPerson> wrapper = new QueryWrapper<>();
        wrapper.eq("tech_group", techGroup);
        return techPersonService.getOne(wrapper);
    }

    /**
     * 得到全部的技术组,用来填充下拉框
     * @param group  前端传递过来的技术组，用来做默认的填充
     * @param selected 是否需要默认填充一个
     * @return 全部技术组
     */
    @RequestMapping("/getTechGroupResults")
    public List<SelectGroupResult> getTechGroupResults(@RequestParam(defaultValue = "-1") Integer group,boolean selected) {
        List<SelectGroupResult> selectGroupResults = new ArrayList<>();
        List<TechPerson> list = techPersonService.list(null);
        for (TechPerson person : list) {
            SelectGroupResult result = new SelectGroupResult();
            result.setContent(person.getTechGroup() + "组");
            result.setValue(person.getTechGroup() + "");
            //如果有指定需要哪一个组，则选择那一组
            if(person.getTechGroup()==group){
                result.setSelected(true);
            }
            selectGroupResults.add(result);
        }
        if (selectGroupResults.size() > 0) {
            //如果没有指定需要哪一个组，并且需要选择一组，则默认选择第一个组
            if(group==-1&&selected){
                selectGroupResults.get(0).setSelected(true);
            }
        }
        return selectGroupResults;
    }

    /**
     * 添加一个技术员
     * @param techPerson  技术员的对象
     * @return 前端接收的执行结果对象
     */
    @RequestMapping("/addTechPerson")
    @Transactional
    public MySapResult addTechPerson(TechPerson techPerson) {
        //首先判断技术组是否已经存在
        TechPerson person = getTechPersonByTechGroup(techPerson.getTechGroup());
        if (person != null) {
            return MySapResult.fail("添加技术员失败,技术组已经存在");
        }
        return AddUtil.addObject("添加技术员", techPerson, techPersonService);
    }

    /**
     * 通过id更新一个技术员
     * @param person  技术员信息
     * @return  前端接收的执行结果对象
     */
    @RequestMapping("/updateTechPerson")
    @Transactional
    public MySapResult updateTechPerson(TechPerson person,@RequestParam(defaultValue = "false") boolean updateGroup) {
        if(updateGroup){
            TechPerson tech = getTechPersonByTechGroup(person.getTechGroup());
            if(tech!=null){
                return MySapResult.fail("技术组已经存在，更新信息失败");
            }
            return UpdateUtil.updateObjectById("更新技术员信息",person,techPersonService);
        }else{
            person.setTechGroup(null);
            return UpdateUtil.updateObjectById("更新技术员信息",person,techPersonService);
        }
    }

    /**
     *通过 id 删除技术员，逻辑上的删除
     * @param ids 技术员id的数组
     * @return 前端接收的执行结果对象
     */
    @RequestMapping("/deleteTechPersons")
    @Transactional
    public MySapResult deleteTechPersons(@RequestParam("ids[]") Integer[] ids) {
        return DeleteUtil.deleteMany("删除技术员", ids, techPersonService);
    }



}

